package nodos;

import java.util.ArrayList;

import javax.swing.tree.DefaultMutableTreeNode;

public class NodoCuerpoClase extends Nodo {

	private Nodo declaracionCampo;
	private Nodo declaracionConstante;
	private Nodo constructor;
	private Nodo declaracionMetodo;
	private NodoCuerpoClase cuerpoClase;

	public NodoCuerpoClase(Nodo declaracionCampo, Nodo declaracionConstante, Nodo constructor, Nodo declaracionMetodo, NodoCuerpoClase cuerpoClase) {
		this.declaracionCampo = declaracionCampo;
		this.declaracionConstante = declaracionConstante;
		this.constructor = constructor;
		this.declaracionMetodo = declaracionMetodo;
		this.cuerpoClase = cuerpoClase;
	}

	@Override
	public DefaultMutableTreeNode getSubArbolVisual() {
		DefaultMutableTreeNode raiz=new DefaultMutableTreeNode("Cuerpo de Clase");
		if(declaracionCampo!=null)
			raiz.add((declaracionCampo.getSubArbolVisual()));
		if(declaracionConstante!=null)
			raiz.add((declaracionConstante.getSubArbolVisual()));
		if(constructor!=null)
			raiz.add((constructor.getSubArbolVisual()));
		if(declaracionMetodo!=null)
			raiz.add((declaracionMetodo.getSubArbolVisual()));
		ArrayList<Nodo> elementos=obtenerElementosClase();
		if(elementos.size()!=0)
			for (Nodo elemento : elementos) {
				raiz.add(elemento.getSubArbolVisual());
			}
		return raiz;
	}

	private ArrayList<Nodo> obtenerElementosClase(){
		ArrayList<Nodo> elementos=new ArrayList<Nodo>();
		guardarElementos(elementos, cuerpoClase);
		return elementos;
	}
	private void guardarElementos(ArrayList<Nodo> sentencias,NodoCuerpoClase raizSubArbol){
		if(raizSubArbol==null)
			return;
		else{
			if(raizSubArbol.declaracionCampo!=null)
				sentencias.add(raizSubArbol.declaracionCampo);
			if(raizSubArbol.declaracionConstante!=null)
				sentencias.add(raizSubArbol.declaracionConstante);
			if(raizSubArbol.constructor!=null)
				sentencias.add(raizSubArbol.constructor);
			if(raizSubArbol.declaracionMetodo!=null)
				sentencias.add(raizSubArbol.declaracionMetodo);
			guardarElementos(sentencias, raizSubArbol.cuerpoClase);
		}
	}

	@Override
	public String traducir(int profundidad) {
		String tabs="";
		for (int i = 0; i < profundidad; i++) tabs+="\t";
		String codJava=tabs;
		if(declaracionCampo!=null)
			codJava+=declaracionCampo.traducir(profundidad)+";\n";
		if(declaracionConstante!=null)
			codJava+=declaracionConstante.traducir(profundidad)+";\n";
		if(constructor!=null)
			codJava+=constructor.traducir(profundidad);
		if(declaracionMetodo!=null)
			codJava+=declaracionMetodo.traducir(profundidad);
		if(cuerpoClase!=null)
			codJava+=cuerpoClase.traducir(profundidad);
		return codJava;
	}
}
